iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0

上一篇是介紹如何將 Rust 後端部署到 DigitalOcean,這篇會介紹如何部署到 AWS EC2,兩種方式給大家參考。

AWS EC2

AWS EC2(Amazon Web Services Elastic Compute Cloud)是一個提供可擴展的計算能力的服務。它允許使用者租用虛擬的電腦來運行自己的應用程式。EC2 提供了各種不同大小和性能的虛擬機器,以及許多其他功能,如自動擴展、監控和安全性設置。

開始使用 EC2

登入會員後,選擇「啟動新執行個體」。

輸入名稱

輸入名稱,方便之後辨識。

選擇作業系統

選擇 Amazon Linux 或是 Ubuntu 都可以,這裡選擇 Amazon Linux。架構的話,也是都可以,這裡選擇 x86。以下是這兩者的差異:

特點 Amazon Linux Ubuntu
設計目的 為 AWS 雲環境量身定製,提供高效能、高可靠、和高安全的環境。 通用 Linux 發行版,適用於桌面、伺服器和雲環境。
兼容性和集成 與 AWS 服務和功能有更好的集成。 可能需要額外配置或軟體包來與 AWS 服務和功能完全集成。
套件管理 使用 YUM 作為套件管理系統。 使用 APT 作為套件管理系統。
社區和支援 社區相對較小,但 AWS 提供官方支援和文件。 擁有大而活躍的社區,容易找到幫助和資源,以及廣泛的 library 和文件。
更新和維護 由 AWS 控制更新和維護,可能有更穩定的更新和維護周期。 更新可能更頻繁,並且由廣泛的社區支援。
版權和許可 閉源。 開源。
效能 在 AWS 雲環境中可能提供更好的效能。 效能可能依賴於特定的硬體和應用配置。

選擇執行個體類型

這裡選擇 t2.micro,因為是免費的,所以選擇這個就好。不過,如果對於效能非常在意的話,選這個就不太適合了,可以考慮其他的選項。

設定金鑰

這裡選擇「建立新的金鑰對」,然後輸入名稱,然後下載金鑰。

網路設定

網路設定的部分,選擇自定義,所以點擊編輯按鈕。

重點在於下面的部分,點擊新增安全群組。

連接埠範圍就輸入 8080,自訂來源新增 0.0.0.0/0 和 ::/0。

其他的部分就不用動了,直接點選「啟動執行個體」。

看到下面的畫面,代表已經成功建立了。

連線到 EC2

接著等待一下,等到執行個體狀態還有檢查狀態都通過,就可以點擊「連線」。

直接點擊「連線至執行個體」。

進入後就會看到以下畫面。

安裝 Docker

  • 使用 yum 更新:
sudo yum update
  • 安裝 Docker:
sudo yum install docker
  • 啟動 Docker 服務:
sudo systemctl start docker
  • 檢查 Docker 是否成功安裝:
docker --version

登入 Docker

  • 將使用者加入 docker 群組:

加上這個步驟在之後可以不用 sudo 就能執行 docker 指令:

$ sudo usermod -a -G docker ec2-user
  • 啟動 Docker 並設置開機自動啟動:
$ sudo systemctl start docker
$ sudo systemctl enable docker

然後需要登出並重新登入,以便讓群組變更生效。

  • 登入 Docker:

這樣就可以不用輸入 sudo:

$ docker login

把建立的 Image 拉下來

$ docker pull username/image-name:tag

執行 Image

$ docker run -p 8080:8080 username/image-name:tag

最後就可以在 Postman 測試一下,例如 IP 是 13.212.137.158

使用 Docker Compose 解決 .env 問題

跟上一篇一樣,在測試使用地址產生 QR code 時會發現沒辦法正常回應,這是因為我們把 API Key 放在 .env 裡面,所以在呼叫 API 時,沒辦法拿到正確的 API Key。

這篇文章使用了不同的處理方式,使用 Docker Compose 來解決這個問題。

建立 docker-compose.yml

首先建立一個 docker-compose.yml 檔案,內容如下:

version: '3.8'
services:
  qrcode-actix:
    build: .
    image: bucky0112/qrcode-actix:latest
    ports:
      - '8080:8080'
    env_file:
      - .env

這個檔案設定了一個服務,名稱是 qrcode-actix,然後指定了 Dockerfile 的位置,以及 Image 的名稱,還有對應的 port,最後是指定 .env 檔案的位置。

接下來可以測試一下:

$ docker-compose up --build

沒問題的話,就可以上傳到 AMI(Amazon Machine Image) 了。

上傳到 AMI

上傳的方式有很多種,這裡示範一下用 Git 來上傳。

安裝 Git

因為 AMI 預設沒有安裝 Git,所以要先安裝一下:

$ sudo yum install git -y

下載專案

確保專案已經上傳到 GitHub,然後在 AMI 上執行以下指令:

$ git clone <repository-url>

安裝 Docker Compose

$ sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

最後記得要新增一個 .env,可以用 vim 來新增。

接下來就可以執行 docker-compose 了:

$ docker-compose up --build

最後在 Postman 測試也沒問題:

不過這樣的方式有點麻煩,所以之後可以考慮使用 CI/CD 來自動化這個流程。


上一篇
Day 28 - 部署到 DigitalOcean
下一篇
Day 30 - 前端部署到 Vercel
系列文
30 天用 Rust 打造 QR Code 製造機30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言